package com.hongsen.cn.Utils;


import android.content.Context;
import android.view.View;

import java.util.Arrays;
import java.util.Map;
import java.util.Set;

public class StringUtils {

    /**
     * 计算文本的长度是否超过最大行
     *
     * @param text
     * @return
     */
    public static boolean isGTmaxLines(String text, View view, Context context) {
        int MAX_LINES=3;
        int lines=0;
        // 获得字体的宽度，sp转px
        int txtWidth = DisplayUtils.sp2px(context, 14);
        // 获得屏幕的宽度 30为margin+padding总和
        int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
        view.measure(0,w);
        int viewWidth = view.getMeasuredWidth();
        // 获得单行最多显示字数
        int maxWords = viewWidth / txtWidth;
        // 计算字符串长度，
        int stringLen = text.length();
        if(text.contains("\n")){
            String strs[] = text.split("\n");
            int str_lines;
            for (int i=0;i<strs.length;i++){
                str_lines =strs[i].length() / maxWords;
                if(strs[i].length() % maxWords > 0){
                    str_lines++;
                }
                lines += str_lines;
            }
        }else {
            lines = stringLen / maxWords;// 字符串长度除以单行最多显示字数为行数
        }
        if (lines > MAX_LINES) {
            // 如果大于指定行数，则直接返回
            return true;
        } else if (lines == MAX_LINES) {
            // 否则需要判断下是否等于最大行，但是有余数
            if (stringLen % maxWords > 0) {
                return true;
            }
        }
        return false;
    }

    //参数类型是Map<String,String> 因为支付只能用string的参数。如果诸君还需要修改的话，那也可以适当的做调整
    /**
     *
     * map转str
     * @param map
     * @return
     */
    public static String getMapToString(Map<String,String> map){
        Set<String> keySet = map.keySet();
        //将set集合转换为数组
        String[] keyArray = keySet.toArray(new String[keySet.size()]);
        //给数组排序(升序)
        Arrays.sort(keyArray);
        //因为String拼接效率会很低的，所以转用StringBuilder。博主会在这篇博文发后不久，会更新一篇String与StringBuilder开发时的抉择的博文。
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < keyArray.length; i++) {
            // 参数值为空，则不参与签名 这个方法trim()是去空格
            if (map.get(keyArray[i]).trim().length() > 0) {
                sb.append(keyArray[i]).append("=").append(map.get(keyArray[i]).trim());
            }
            if(i != keyArray.length-1){
                sb.append("&");
            }
        }
        return sb.toString();
    }
}
